package db

import (
	"context"
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/frame/g"
)

// 获取非安全表模型，先期设置为排除 ORM 自带的 create_at、update_at、delete_at
// tableName string true "操作的数据表"
// dbName query string false "操作的数据库"
// 200 {object} gdb.Model "表模型"
func GetUnSafaTable(ctx context.Context, tableName string, dbName ...string) *gdb.Model {
	if len(dbName) > 0 {
		return g.Table(tableName, dbName[0]).Ctx(ctx).Unscoped()
	} else {
		return g.Table(tableName).Ctx(ctx).Unscoped()
	}
}

// 获取非安全表模型 增加了删除条件
func GetUnSafaTableAddDeleteWhere(ctx context.Context, tableName string, dbName ...string) *gdb.Model {
	var m *gdb.Model
	if len(dbName) > 0 {
		m = GetUnSafaTable(ctx, tableName, dbName[0])
	} else {
		m = GetUnSafaTable(ctx, tableName)
	}
	/*
		// 优化查询条件
		fieldsStrCacheKey := tableName + "_GetFieldsStr"
		fieldsStr, err := g.Redis().DoVar("GET", fieldsStrCacheKey)
		if err != nil {
			panic("GetUnSafaTableAddDeleteWhere 失败 " + err.Error())
		}
		fields := ""
		if fieldsStr.IsEmpty() {
			fields = m.GetFieldsStr()
			g.Redis().DoVar("SET",fieldsStrCacheKey,fields)
		} else	{
			fields = fieldsStr.String()
		}*/
	// 不用 * 号查询
	m.Fields(m.GetFieldsStr())
	// 判断删除 字段是否存在，存在才加该条件
	jieguo, _ := m.HasField("delete_at")
	if jieguo {
		// 如果存在字段则加入
		m.Where("delete_at < 1")
	}

	return m
}
